/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package daoimpl;

import controller.ConnectionMySQL;
import dao.DentistaDao;
import enun.EstadoCivil;
import enun.Sexo;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Dentista;
import model.Endereco;

/**
 *
 * @author Rodrigo
 */
public class DentistaDaoImpl implements DentistaDao {

   
    @Override
    public void inserir(Dentista d) {

        String sql = "INSERT INTO Dentista (nome,idade,sexo,numeroCRO,estadocivil,id_endereco) values (?,?,?,?,?,?)";
        try {
            PreparedStatement ps = ConnectionMySQL.getConnection().prepareStatement(sql);

            ps.setString(1, d.getNome());
            ps.setInt(2, d.getIdade());
            ps.setString(3, d.getSexo().name());
            ps.setInt(4, d.getNumeroCRO());
            ps.setString(5, d.getEstadoCivil().name());
            ps.setInt(6, d.getEndereco().getId());

            ps.execute();

            System.out.println("Dados Inseridos");

        } catch (SQLException e) {
            System.out.println("ERROR !");
            e.printStackTrace();
           
        }
    }

    
    @Override
    public void alterar(Dentista d) {

        String sql = "update Dentista set nome = ?, idade = ?, sexo = ?,numeroCRO = ?, estadocivil = ? , id_endereco = ? where id = ?";
        try {
            PreparedStatement ps = ConnectionMySQL.getConnection().prepareStatement(sql);

            ps.setString(1, d.getNome());
            ps.setInt(2, d.getIdade());
            ps.setString(3, d.getSexo().name());
            ps.setInt(4, d.getNumeroCRO());
            ps.setString(5, d.getEstadoCivil().name());         
            ps.setInt(6, d.getEndereco().getId());
            ps.setInt(7, d.getId());
            
            ps.execute();

            System.out.println("Dados Inseridos");

        } catch (SQLException e) {
            System.out.println("ERROR !");
            e.printStackTrace();
          
        }

    }

   
    @Override
    public List<Dentista> listarTodos() {
        StringBuilder sb = new StringBuilder(); 
        
        sb.append(" SELECT d.id, d.nome,d.idade,d.numeroCRO,d.sexo,d.estadocivil,e.logadouro,e.cidade,e.numero,e.bairro, ");
        sb.append(" e.cep,e.idendereco FROM Dentista d");
        sb.append(" INNER JOIN Endereco e on d.id_endereco = e.idendereco");     
       
        List<Dentista> dentistas = new ArrayList<>();
        try {
            PreparedStatement ps = ConnectionMySQL.getConnection().prepareStatement(sb.toString());
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Dentista d = new Dentista();
                Endereco e = new Endereco();              
                d.setEndereco(e);
                d.setId(rs.getInt("d.id"));
                d.setNome(rs.getString("d.nome"));
                d.setNumeroCRO(rs.getInt("d.numeroCRO"));
                d.setIdade(rs.getInt("d.idade"));
                d.setSexo(Sexo.valueOf(rs.getString("d.sexo")));
                d.setEstadoCivil(EstadoCivil.valueOf(rs.getString("d.estadocivil")));
                d.getEndereco().setLogadouro(rs.getString("e.logadouro"));
                d.getEndereco().setCidade(rs.getString("e.cidade"));
                d.getEndereco().setNumero(rs.getString("e.numero"));
                d.getEndereco().setBairro(rs.getString("e.bairro"));                
                e.setId(rs.getInt("e.idendereco")); 
                e.setCep(rs.getString("e.cep"));
              
                dentistas.add(d);
            }

        } catch (SQLException e) {
            System.out.println("ERROR !");
            e.printStackTrace();
        }

        return dentistas;
    }

    
  
    @Override
    public Dentista listarPorId(int id) {
           String sql = "select * from Dentista where id=?";
           Dentista d = new Dentista();
        try {
            PreparedStatement ps = ConnectionMySQL.getConnection().prepareStatement(sql);
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                
                d.setId(rs.getInt("id"));
                d.setNome(rs.getString("nome"));
                d.setIdade(rs.getInt("idade"));
                d.setSexo(Sexo.valueOf(rs.getString("sexo")));
                d.setEstadoCivil(EstadoCivil.valueOf(rs.getString("estadocivil")));               
            }

        } catch (SQLException e) {
            System.out.println("ERROR !");
            
        }

        return d;

    }

  
    @Override
    public void deletar(Dentista d) {
        String sql = "delete from Dentista where id = ?";
        try {
            PreparedStatement ps = ConnectionMySQL.getConnection().prepareStatement(sql);
            ps.setInt(1, d.getId());
            ps.execute();

        } catch (SQLException e) {
            System.out.println("ERROR !");
            
        }
    }

  

}
